home *** CD-ROM | disk | FTP | other *** search
/ PC World Interactive 7 / PC World Interactive 7.iso / program / asprog.EXE / PRAW.ASM < prev    next >
Assembly Source File  |  1995-08-21  |  2KB  |  106 lines

  1. ;
  2. ; play raw sound files through the pc's internal speaker
  3. ; code by Semih Hazar
  4. ;
  5. ; wait for the background music playing routines !
  6. ; have ideas about that ^ put an e-mail to hazarse@doruk.com.tr
  7. ;
  8.  
  9. BitsPerSample   Equ 64               ; # of bits per samle (1sample = 1byte)
  10.  
  11. .model          tiny
  12. .code
  13. org             100h
  14.  
  15.  
  16. main    :       mov     ax,3d00h     ; open data file and read the sound
  17.         lea     dx,file
  18.         int     21h
  19.         mov     bx,ax
  20.         mov     ah,3fh
  21.         mov     cx,20000
  22.         lea     dx,buf
  23.         int     21h
  24.         mov     boy,ax
  25.         mov     ah,3eh
  26.         int     21h
  27.  
  28.         call    set_hi_an_lo
  29.         call    MakePCStable
  30.         
  31.         mov     cx,boy
  32.         lea     si,buf
  33. ploop   :       lodsb
  34.         push    si
  35.         push    cx
  36.         mov     si,offset pcstable
  37.         xor     ah,ah
  38.         mov     cl,bitspersample
  39.         mul     cl
  40.         add     si,ax
  41.         mov     cx,bitspersample
  42. bitlp   :       lodsb
  43.         out     61h,al
  44.         loop    bitlp
  45.         pop     cx
  46.         pop     si
  47.         loop    ploop
  48.         mov     ah,4ch
  49.         int     21h
  50.  
  51. set_hi_an_lo    proc    near
  52. ; consider the hi and lo value depending on the port61's current status
  53.         in      al,61h
  54.         mov     cl,3
  55.         not     cl
  56.         and     al,cl
  57.         mov     _cl,al  ; this one's low
  58.         or      al,2
  59.         mov     _ch,al  ; and this is hi
  60.         ret
  61. set_hi_an_lo    endp
  62.  
  63. MakePCStable    proc    near
  64. ; make a table for the 256 samples (0-255).
  65. ; this atble is bitspersample**256 bytes long
  66. ; each (bitspersample) byte is the bit patterns (hi or low)
  67. ; these patterns are send out to 61h ,then the sound forms...
  68.         mov     di,offset PCStable
  69.         mov     cx,256
  70.         mov     mainval,0
  71. mainloop :      push    cx
  72.         mov     sum,0
  73.         mov     cx,BitsPerSample
  74. bits_loop :     mov     bl,mainval
  75.         xor     bh,bh
  76.         add     sum,bx
  77.         cmp     sum,255
  78.         jae     bigger
  79.         mov     al,_cl
  80.         stosb
  81. eobl    :       loop    bits_loop
  82.         pop     cx
  83.         inc     mainval
  84.         loop    mainloop
  85.         ret
  86.  
  87. bigger  :       mov     ax,255
  88.         sub     sum,ax
  89.         mov     al,_ch
  90.         stosb
  91.         jmp     short eobl
  92.  
  93. MakePCStable    endp
  94.  
  95.  
  96. file            db      'ses',0
  97. sum             dw      0
  98. mainval         db      0
  99. _ch             db      0
  100. _cl             db      0
  101. boy             dw      0
  102. PCStable        db      (BitsPerSample*256) dup(?)
  103. buf             db      20000 dup(?)
  104.  
  105. end     main
  106.